const WebSocket = require('ws');
const http = require('http');

// 创建HTTP服务器
const server = http.createServer();

// 创建WebSocket服务器
const wss = new WebSocket.Server({ server });

console.log('WebSocket服务器启动中...');

// 连接处理
wss.on('connection', (ws, req) => {
  console.log('新的WebSocket连接已建立');
  console.log('客户端地址:', req.socket.remoteAddress);
  console.log('客户端端口:', req.socket.remotePort);
  
  // 发送欢迎消息
  ws.send(JSON.stringify({
    type: 'welcome',
    message: 'WebSocket服务器连接成功',
    timestamp: new Date().toISOString()
  }));
  
  // 消息处理
  ws.on('message', (message) => {
    try {
      const data = message.toString();
      console.log('收到消息:', data);
      
      // 回显消息
      ws.send(JSON.stringify({
        type: 'echo',
        data: data,
        timestamp: new Date().toISOString()
      }));
      
      // 模拟推送数据
      setTimeout(() => {
        const testData = {
          type: 'push',
          data: '测试数据 - ' + new Date().toLocaleTimeString(),
          timestamp: new Date().toISOString()
        };
        ws.send(JSON.stringify(testData));
        console.log('推送测试数据:', testData.data);
      }, 3000);
      
    } catch (error) {
      console.error('处理消息失败:', error);
    }
  });
  
  // 连接关闭
  ws.on('close', () => {
    console.log('WebSocket连接已关闭');
  });
  
  // 连接错误
  ws.on('error', (error) => {
    console.error('WebSocket连接错误:', error);
  });
});

// 启动服务器
const PORT = 8081;
server.listen(PORT, '127.0.0.1', () => {
  console.log(`✅ WebSocket服务器已启动`);
  console.log(`📍 地址: ws://127.0.0.1:${PORT}`);
  console.log(`📍 地址: ws://localhost:${PORT}`);
  console.log('');
  console.log('📝 使用说明:');
  console.log('1. 保持此窗口运行');
  console.log('2. 启动悬浮应用');
  console.log('3. 在配置中启用WebSocket');
  console.log('4. 点击"开始"按钮');
  console.log('');
  console.log('🔄 服务器会自动推送测试数据');
  console.log('⏹️  按 Ctrl+C 停止服务器');
});

// 优雅关闭
process.on('SIGINT', () => {
  console.log('\n正在关闭WebSocket服务器...');
  wss.close(() => {
    console.log('WebSocket服务器已关闭');
    process.exit(0);
  });
});

// 错误处理
server.on('error', (error) => {
  if (error.code === 'EADDRINUSE') {
    console.error(`❌ 端口 ${PORT} 已被占用`);
    console.log('请关闭占用该端口的程序，或修改端口号');
  } else {
    console.error('服务器错误:', error);
  }
  process.exit(1);
}); 